package com.scc.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

// 这个类使用了Spring的配置注解，表明它是一个配置类，用于定义Spring应用中的相关配置
@Configuration
public class CorsConfig {
    @Bean
    // 在这里，该方法返回一个CorsFilter，用于处理跨域资源共享（CORS）相关的配置和过滤逻辑
    public CorsFilter corsFilter() {
        // 创建一个CorsConfiguration对象，它用于配置跨域相关的各种规则
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        /*
            1、origin前端源路径
            2、HTTP请求方法
            3、请求头
            4、凭证
         */
        //url(origin源)与前端反向代理端口对应
        corsConfiguration.addAllowedOrigin("http://localhost:5173");
        // 添加允许的HTTP方法，"*"表示允许所有的HTTP方法，例如GET、POST、PUT、DELETE等
        corsConfiguration.addAllowedMethod("*");
        // 添加允许的请求头，只允许添加token请求头才可以跨域
        corsConfiguration.addAllowedHeader("*");
        // 设置是否允许携带凭证（例如cookies等），这里设置为true，表示允许，前端要与之对应
        corsConfiguration.setAllowCredentials(true);
        // 创建一个基于URL的CorsConfigurationSource对象，它用于根据不同的URL路径来应用对应的CorsConfiguration配置
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 将前面定义好的CorsConfiguration配置应用到所有的路径（"/**"表示所有路径）上
        source.registerCorsConfiguration("/**", corsConfiguration);
        // 使用配置好的UrlBasedCorsConfigurationSource创建一个CorsFilter并返回，
        return new CorsFilter(source);
    }
}
